const { sequelize } = require('../config/database');

/**
 * 迁移代币字段类型从INTEGER到DECIMAL(10,3)
 * 支持小数代币（如0.1个代币）
 */
async function migrateTokenFieldsToDecimal() {
  const transaction = await sequelize.transaction();
  
  try {
    console.log('开始迁移代币字段类型...');
    
    // 1. 修改 visitors 表的代币字段
    console.log('修改 visitors 表字段类型...');
    await sequelize.query(`
      ALTER TABLE visitors 
      MODIFY COLUMN tokens_balance DECIMAL(10,3) NOT NULL DEFAULT 0.000 COMMENT '当前代币余额（总计）',
      MODIFY COLUMN tokens_purchased DECIMAL(10,3) NOT NULL DEFAULT 0.000 COMMENT 'Stripe购买的代币余额',
      MODIFY COLUMN tokens_promotional DECIMAL(10,3) NOT NULL DEFAULT 0.000 COMMENT '活动赠送的代币余额',
      MODIFY COLUMN tokens_compensated DECIMAL(10,3) NOT NULL DEFAULT 0.000 COMMENT '补偿给用户的代币余额'
    `, { transaction });
    
    // 2. 修改 token_transactions 表的代币字段
    console.log('修改 token_transactions 表字段类型...');
    await sequelize.query(`
      ALTER TABLE token_transactions 
      MODIFY COLUMN amount DECIMAL(10,3) NOT NULL COMMENT '代币数量（正数为增加，负数为减少）',
      MODIFY COLUMN balance_after DECIMAL(10,3) NOT NULL COMMENT '交易后的余额'
    `, { transaction });
    
    await transaction.commit();
    console.log('代币字段类型迁移完成！');
    console.log('现在支持小数代币（如0.1个代币）');
    
  } catch (error) {
    await transaction.rollback();
    console.error('迁移失败:', error.message);
    throw error;
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  migrateTokenFieldsToDecimal()
    .then(() => {
      console.log('迁移成功完成');
      process.exit(0);
    })
    .catch((error) => {
      console.error('迁移失败:', error);
      process.exit(1);
    });
}

module.exports = migrateTokenFieldsToDecimal; 